﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Maestro_Proveedores.clases.almacen
{
    abstract class ModeloAbstracto
    {

        public String nombreModelo;
        public ArrayList registros;
        public int semanaPronostico;
        public Resultado resNideal;
        public static int limiteEvaluacion=52;

        public abstract void calcularModelo(ArrayList registros);

        public abstract Resultado obtenerResultado();

        public abstract void pronosticoSemanaN();

        protected System.Collections.ArrayList copiarArrayList(System.Collections.ArrayList registros)
        {
            System.Collections.ArrayList registrosClon = new System.Collections.ArrayList();

            foreach (Registro reg in registros)
            {
                Registro regTemp = new Registro(reg);
                registrosClon.Add(regTemp);
            }

            return registrosClon;
        }

        protected System.Collections.ArrayList copiarArrayListSED(System.Collections.ArrayList registros)
        {
            System.Collections.ArrayList registrosClon = new System.Collections.ArrayList();

            foreach (RegistroSED reg in registros)
            {
                RegistroSED regTemp = new RegistroSED(reg);
                registrosClon.Add(regTemp);
            }

            return registrosClon;
        }

        protected System.Collections.ArrayList copiarArrayListCRO(System.Collections.ArrayList registros)
        {
            System.Collections.ArrayList registrosClon = new System.Collections.ArrayList();

            foreach (RegistroCRO reg in registros)
            {
                RegistroCRO regTemp = new RegistroCRO(reg);
                registrosClon.Add(regTemp);
            }

            return registrosClon;
        }

        public Resultado CalcAlfaOptimo(ArrayList resultadosAlfa)
        {
            double nideal = 0;
            Resultado resN = new Resultado();
            foreach (Resultado res in resultadosAlfa)
            {
                nideal = res.ECM;
                resN = res;
            }

            foreach (Resultado res in resultadosAlfa)
            {
                if (res.ECM < nideal)
                {
                    nideal = res.ECM;
                    resN = res;
                }
            }

            return resN;

        }

    }
}
